package org.applesline.desensitize.handle.impl;

import org.applesline.desensitize.constants.DesensitizeType;
import org.applesline.desensitize.handle.DesensitizeAdapter;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
 * @author liuyaping
 * @date 2022/1/13
 */
@Component
public class ChineseNameHandler extends DesensitizeAdapter {

    private static final List<String> CHINESE_NAMES = Arrays.asList("欧阳", "太史", "端木", "上官", "司马", "东方", "独孤", "南宫", "万俟", "闻人", "夏侯", "诸葛", "尉迟", "公羊", "赫连", "澹台", "皇甫", "宗政", "濮阳", "公冶", "太叔", "申屠", "公孙", "慕容", "仲孙", "钟离", "长孙", "宇文", "城池", "司徒", "鲜于", "司空", "汝嫣", "闾丘", "子车", "亓官", "司寇", "巫马", "公西", "颛孙", "壤驷", "公良", "漆雕", "乐正", "宰父", "谷梁", "拓跋", "夹谷", "轩辕", "令狐", "段干", "百里", "呼延", "东郭", "南门", "羊舌", "微生", "公户", "公玉", "公仪", "梁丘", "公仲", "公上", "公门", "公山", "公坚", "左丘", "公伯", "西门", "公祖", "第五", "公乘", "贯丘", "公皙", "南荣", "东里", "东宫", "仲长", "子书", "子桑", "即墨", "达奚", "褚师");

    @Override
    public String doMask(String fullName) {
        if (isBlank(fullName)) {
            return "";
        } else if (fullName.length() == 1) {
            return "*";
        } else {
            int csNameLen = 2;
            if (CHINESE_NAMES.contains(fullName.substring(0, csNameLen))) {
                return hide(fullName, 0, csNameLen);
            } else {
                return fullName.length() > 5 ? hide(fullName, 0, 3) : hide(fullName, 0, 1);
            }
        }
    }

    @Override
    public DesensitizeType getFieldType() {
        return DesensitizeType.CHINESE_NAME;
    }
}
